通过遥感控制 Cube的移动


这是在Unity中布局好的界面 通过左下的遥感控制中间的立方体的移动

在中间的image中添加组件Event Trigger,并且将脚本挂载到中间的image上,在组件Event Trigger中添加两个事件,Drag和EndDrag;

这两个事件分别是在拖动过程中调用,和拖动结束后调用



using UnityEngine;

using System.Collections;using 

UnityEngine.UI;

public class YanganTest : MonoBehaviour

{    

Vector3 _selfStartPos;    

RectTransform _CurrPos;    

float radius = 100f;    

GameObject Player;        

void Start()    

{        

_CurrPos = transform.GetComponent<RectTransform>();        //获取当前的RectTransform

_selfStartPos = transform.position;        //获取初始位置

GameObject PlayerP = Resources.Load("Cube") as GameObject;  //获取预设体      

Player = Instantiate(PlayerP, Vector3.zero, Quaternion.identity) as GameObject;        //将预设体创建到场景中

Player.AddComponent<CharacterController>();  //为预设体添加CharacterController组件使其够更加方便的控制

}    

public void Drag()    //该方法在拖动时调用,方法名并没有规定

{        

if (Vector3.Distance(Input.mousePosition, _selfStartPos) <= radius) //如果鼠标距离初始位置小于半径       

{           

 transform.position = Input.mousePosition;        //使中间的image的位置等于鼠标位置

}    

}   

public void EndDrag()    //该方法在拖动结束后调用,方法名并没有规定

{       

 transform.position = _selfStartPos;   //拖动结束后使其归位

 }    

public void FixedUpdate()    //执行物理变化的函数,每一帧执行

{       

 if (Vector3.Distance(_CurrPos.position, _selfStartPos) >0)       //当中间的image被拖离初始位置时

 {            

float x = (Input.mousePosition - _selfStartPos).x;            //获取x坐标

float y = (Input.mousePosition - _selfStartPos).y;            //获取y坐标

Vector3 dir = new Vector3(x, 0,y);                        //初始化方向

Player.GetComponent<CharacterController>().SimpleMove(dir * 5 *Time.deltaTime);//获取Player上的CharacterController组件,调用其中方法SimpleMove,这个方法的参数是一个三维向量,其中5是速度

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容