• 见缝插针游戏针不会更着上面旋转的小球运动


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 2401_82962270 2024-03-30 08:38 采纳率: 0% 浏览 2 首页/ 编程语言 / 见缝插针游戏针不会更着上面旋转的小球运动 c#unity 我用的是距离检测 针达到位置之后就把自己设置为旋转球的子对象 用的是transform.parent=旋转球 但是发射出去之后针没用更着旋转球运动 而是到我设置的旋转球前的目标位置 到了目标位置之后就围绕着目标位置旋转 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-30 08:38
      关注

      引自免费微信小程序:皆我百晓生

      在C#中,为了实现"见缝插针游戏针不会更着上面旋转的小球运动",我们需要理解并解决以下几个关键点:

      1. 控制小球: 在针没有跟随旋转球移动之前,它应该位于初始位置。在这个场景中,我们可以将针作为一个相对固定的子对象添加到玩具轮上,然后将其父节点(当前旋转球)设为新的玩具轮。当发射小球时,它会沿着玩具轮上的尖角指向某个特定的位置。

      2. 控制针的旋转: 当玩具轮被射出时,我们可以通过旋转这个玩具轮,使小球随之移动并接触到针。对于这个部分,可以考虑以下两种方法:

        a) 坐标变换:当我们对玩具轮进行旋转时,可以通过将玩具轮的当前位置坐标作为参数传递给Transform()构造函数,得到一个新的旋转后的Transform对象。在这个旋转后的新Transform对象中,我们可以重新设置与之关联的 parent 属性,并且将针作为其中的一个子对象绑定到新创建的玩具轮上。

        b) 互动原点(Target)设置:当我们设置一个明确的交互原点(Target),例如针从球的上方偏离某些角度开始旋转时,可以使小球在达到这一角度时绕过目标,从而导致小球不跟着旋转球运动。具体步骤如下:

        // 设置原点
        Target target = new Target();
        target.transform.position += Vector3.right * 0.5f;  // 上下方向50%的角度偏移
        
        // 玩具轮被发射后,执行相关操作
        transform.parent = rotationTarget;  // 将玩具轮调整为转动轴子对象
        transform.Rotate(target.transform.position, 45f);  // 根据目标的位置进行旋转
        

        对于这两个方法,以下是一个简单的示例代码,展示了如何根据旋转的角度以及导弹的射程绘制箭头及小球跟随旋转的目标位置:

      using UnityEngine;
      using System.Collections;
      
      public class ViewController : MonoBehaviour
      {
          private GameObject玩具轮;  // 玩具轮实例
          private Transform animationTarget;  // 触发动画的目标位置
      
          void Start()
          {
              // 创建玩具轮
             玩具轮 = new GameObject("玩具轮");
              toyRotationTarget = animationTarget = new Transform();
      
              // 设置射击速度
              float speed = 20f;  // 弹射速度(相对于玩具轮)
      
              // 通过旋转玩具轮控制箭头
              transform.parent = animationTarget;
              animationTarget.rotation = Quaternion.Euler(90f, 0f, 0f);
              transform.Rotate(target.transform.position, speed);
      
              // 小球的移动
              transform.Translate(Vector3.forward * (target.transform.position - transform.position));
          }
      
          void Update()
          {
              if (Input.GetKeyDown(KeyCode.Space))
              {
                  // 发射导弹
                  GameObject missile = Instantiate(missilePrefab, transform.position, Quaternion.identity);
                  missile.transform.position += Vector3.up * speed * Time.deltaTime;
      
                  // 小球跟随导弹移动
                  transform.SetParent(missile.transform, false);
              }
          }
      
          public class Target
          {
              public Transform parent;
              public Vector3 position;
      
              public Target(Transform parent, Vector3 position)
              {
                  this.parent = parent;
                  this.position = position;
              }
          }
      }
      

      注意:上述代码中并没有直接使用Transform作为输入变量或输出变量,因为Transform是Unity内置的数据结构,用于表示三维空间中的对象、属性和动作。如果你需要直接将模型属性(如旋转方向、目标位置等)与输入变量进行绑定,你可以参考以下代码片段:

      private void Update()
      {
          transform.position = Position;
      }
      
      private Vector3 Position
      {
          get
          {
              return Vector3.MoveTowards(transform.position, Target.position, Time.deltaTime);
          }
      }
      

      以上方案中,我们将小球的位置(Position)与弹射的目标(Target位置)绑定到了每次按下空格键时的行为上。注意,这只是一个基本示例,实际应用中可能需要根据实际的游戏逻辑(比如关卡设计、瞄准器跟踪等)进一步调整旋转和位置的更新策略。同时,为了避免频繁的释放物体悬挂系统(UIControl, Rigidbody等)可能导致小球碰撞框而造成干扰,可以在发射导弹后手动取消导弹挂起状态。

      综上所述,要实现见到缝插针游戏针不会更着上面旋转的小球运动,我们可以先在玩具轮上创建一个子对象(如动画目标),并通过传递旋转幅度、碰撞检测等信息,实现小球跟随旋转的目标位置。在发射导弹后,解除导弹挂起状态,使得小球能够按照预设的动作正常移动。以上示例中采用的简单方式并不能保证小球始终能够准确跟随旋转目标,实际游戏实现可能会更加复杂,需要针对游戏的具体情况进行相应的优化。

      展开全部

      评论 编辑记录
    • GISer Liu 2024-03-30 08:39
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      根据你的描述,看起来问题可能出在针对象设置为旋转球的子对象后,旋转球的运动没有按照预期进行。可能的原因是旋转球的运动逻辑与针对象的连接方式或者更新方式有关。以下是我对可能的解决思路与解决方案的建议:

      解决思路:

      1. 检查连接逻辑 :确保在将针对象设置为旋转球的子对象之后,它们之间的连接逻辑正确。可能需要调整连接点或者连接方式。
      2. 更新运动状态 :针对象应该在连接后更新其运动状态,以正确跟随旋转球的运动。

        解决方案:

        在你的代码中,需要在将针对象设置为旋转球的子对象后,确保更新针对象的位置和旋转,以使其正确跟随旋转球的运动。下面是一个可能的代码示例:
        csharpCopy code
        // 将针对象设置为旋转球的子对象
        needle.transform.parent = rotatingBall.transform;
        // 更新针对象的位置和旋转
        // 这里假设需要设置一个偏移量 offset,以确保针在旋转球表面正确显示
        Vector3 offset = new Vector3(0, 0, 0); // 设置偏移量
        needle.transform.localPosition = offset; // 设置针的位置
        needle.transform.localRotation = Quaternion.identity; // 设置针的旋转为初始状态
        
        请注意,以上代码示例中的偏移量 offset
        需要根据你的游戏场景和针对象的大小进行调整,以确保针对象正确显示在旋转球的表面。另外,如果你的游戏中需要考虑物理碰撞等因素,还需要相应地处理物理组件(例如
        Rigidbody)的连接和更新。

      如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

      用户答题指南

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【问题之书】
    生活不止诗和远方,还有​眼前的苟且!
    DSP 应用领域及内部结构
    简单上手_Kotlin,让开发更简洁
    JUC第六讲:ThreadLocal/InheritableThreadLocal详解
    线性表之栈和队列(数据结构)(VS)(C语言)(stack and Queue)
    idea 快捷键 自己也可以修改
    第3章 初识SqlSugarCore之ConfigureOptions注入实现
    【POJ No. 3067】 公路交叉数 Japan
    【源码】2024心悦搜剧源码百万级网盘资源
  • 原文地址:https://ask.csdn.net/questions/8081274