联系方式
Java服务器开发群:66728073
C++游戏开发群:197321069
Unity3d游戏开发:286114103
unity3d实现飞机左右循环移动
2016-08-28 21:12浏览数:371 

这个功能对于熟手来说可能非常简单,我是站在一名新手的角度记录一下这个功能的实现。因为我也是刚刚开始学习,这只是基础的一个小功能。

这个功能就是在一个屏幕上,当目标移动到最左边时,穿屏,从最右边再出现,到最右边时,穿屏,再从最左边出现。

目标sprite在unity中排放好就可以了,下面是绑定的C#代码,如果有什么问题,欢迎加左边的QQ群里去讨论:

unity3d版本:Unity 5.3.5f1 (64-bit)

using UnityEngine;

public class PlayerManager : MonoBehaviour {

   private const string HORIZONNAL = "Horizontal";
   //屏幕的最大宽度
   private float maxWidth = Screen.width;
   //主角当前的x坐标
   private float playerPosX = 0;
   //主角自身的宽度,这个宽度好像是相对于世界坐标来说的
   private float playerWidth = 0;
   //屏幕最左边的边界位置
   private float leftFlag = 0;
   //屏幕右边的边界位置
   private float rightFlag = 0;
   // Use this for initialization
   void Start () {
       //获取sprite的宽度
       playerWidth = transform.GetComponent<Renderer>().bounds.extents.x;
       Vector3 tempPoint = new Vector3(0,0,0);
       tempPoint = Camera.main.ScreenToWorldPoint(tempPoint);

       leftFlag = tempPoint.x - playerWidth;
       Debug.Log(leftFlag);
       tempPoint = new Vector3(maxWidth,0,0);
       tempPoint = Camera.main.ScreenToWorldPoint(tempPoint);
       rightFlag = tempPoint.x + playerWidth;
       Debug.Log(rightFlag);
   }
   
   // Update is called once per frame
   void Update () {
       Vector3 playerPos = this.transform.position;
       float playerPosX = playerPos.x;
       if(playerPosX >= leftFlag && playerPosX <= rightFlag)
       {
           this.transform.Translate(Input.GetAxis(HORIZONNAL) * Time.deltaTime * 5f, 0, 0);
       }
        else if(playerPosX < leftFlag)
       {
           this.transform.position = new Vector3(rightFlag,playerPos.y,playerPos.z);
       } else if(playerPosX > rightFlag)
       {
           this.transform.position = new Vector3(leftFlag,playerPos.y,playerPos.z);
       }
   
   }
}