【Unity开发-0.1】关于子物体父物体的空间坐标。

零.问题:2D游戏实现人物行走时从45°转变为侧身

一.实现方法:设置两个人物,状态切换时互换两个角色状态的渲染图层,将应用状态角色图层(Layer)切换至相机渲染范围内(如:Player)

停用状态角色切换至渲染范围外(如:Stop)

二.具体步骤:

1.创建Player01,Player02两个空物体分别存放侧面和45°角色。(一定保持Player01,Player02两个物体在同一个父物体下)

 2.代码实现:

如果监测到状态转换(移动),将行走状态角色物体下所有子物体的图层设为0(同时将静止状态角色子物体图层设为7),反之设为7.

3.注意事项

(1)为了保证两个物体位置时刻保持一致,应将静止状态的position时刻更新为移动状态position

(2)因为要保证坐标一致,所以两种状态应在同一父物体下(transform.position在获得位置坐标时,如果该物体有父物体将获得相对(父物体)坐标而不是世界坐标。)

(3)在MainCamera的Culling Mask中应设置渲染图层

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,可以实现物体依次向目标点横坐标转动,物体依次向不同目标点纵坐标转动: ```csharp public class RotateObjects : MonoBehaviour { public Transform[] horizontalTargets; // 横向目标点数组 public Transform[] verticalTargets; // 纵向目标点数组 public float rotationSpeed = 1f; // 旋转速度 private int horizontalIndex = 0; // 当前横向目标点索引 private int verticalIndex = 0; // 当前纵向目标点索引 private void Update() { // 物体横向旋转 Vector3 horizontalTarget = horizontalTargets[horizontalIndex].position; horizontalTarget.y = transform.position.y; Vector3 horizontalDirection = horizontalTarget - transform.position; Quaternion horizontalRotation = Quaternion.LookRotation(horizontalDirection); transform.rotation = Quaternion.Slerp(transform.rotation, horizontalRotation, rotationSpeed * Time.deltaTime); // 物体纵向旋转 Vector3 verticalTarget = verticalTargets[verticalIndex].position; verticalTarget.x = transform.position.x; Vector3 verticalDirection = verticalTarget - transform.position; Quaternion verticalRotation = Quaternion.LookRotation(verticalDirection); transform.GetChild(0).rotation = Quaternion.Slerp(transform.GetChild(0).rotation, verticalRotation, rotationSpeed * Time.deltaTime); // 判断是否达到目标点,并更新目标点索引 float horizontalDistance = Vector3.Distance(transform.position, horizontalTarget); if (horizontalDistance < 0.1f) { horizontalIndex = (horizontalIndex + 1) % horizontalTargets.Length; } float verticalDistance = Vector3.Distance(transform.position, verticalTarget); if (verticalDistance < 0.1f) { verticalIndex = (verticalIndex + 1) % verticalTargets.Length; } } } ``` 在示例代码中,我们定义了两个数组:horizontalTargets 和 verticalTargets,分别表示物体的横向和物体的纵向目标点。在 Update 方法中,我们先计算出物体向横向目标点旋转的 Quaternion,然后使用 Quaternion.Slerp 方法插值旋转。同理,我们也计算出物体向纵向目标点旋转的 Quaternion,并插值旋转物体。 在每次更新中,我们都会检查物体物体是否已经达到了目标点。如果达到了,则更新目标点索引。我们使用取模运算符(%)来实现循环遍历目标点数组。 请注意,示例代码仅为演示用途,可能需要根据实际需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值