【unity3d游戏开发之基础篇】利用射线实现鼠标控制角色转向和移动(角色移动一)...


 由于最近搞2D游戏, 下面的代码配合NGUI来使用 。。。 将代码拖到角色身上就OK, 实现了角色转向、移动 ,想看效果的可以将代码下下来~ 

 用到了向量来计算角度 以及方向,   得恶补下向量知识了 。。。 

 

代码参考:

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class Test : MonoBehaviour {
 5     
 6     private bool flagMove;
 7     private RaycastHit hit;
 8     private Vector3 mousePos;
 9     private Vector3 targetDir;
10     // Use this for initialization
11     void Start () 
12     {
13         flagMove = false;
14     }
15     
16     void Update ()
17     {
18  
19         if(Input.GetMouseButtonDown(0))
20         {
21             RayControl();
22         }
23         if(flagMove)
24         {
25             if(Vector3.Distance(transform.position,mousePos)>0.1)
26             {
27                 transform.Translate(transform.worldToLocalMatrix* transform.right * Time.deltaTime*0.5f);
28             }
29             else
30             {
31                 flagMove=false;
32             }
33         }
34     }
35  
36     void RayControl()
37     {
38          Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//从Camera发射射线到屏幕
39          if(Physics.Raycast(ray,out hit))//射线碰撞检测
40          {
41              mousePos=hit.point;
42                mousePos.z=transform.position.z;
43               targetDir=mousePos-transform.position;//计算到目标点的方向             
44               Vector3 tempDir=Vector3.Cross(transform.right,targetDir.normalized);
45              float dotValue=Vector3.Dot(transform.right,targetDir.normalized);
46              float angle=Mathf.Acos(dotValue)*Mathf.Rad2Deg;//计算夹角
47              if(tempDir.z < 0)//根据叉乘判断夹角的正负
48              {
49                  angle=angle*(-1);
50              }
51              if(!float.IsNaN(angle))
52              {
53                 transform.RotateAround(transform.position,Vector3.forward,angle);//转向目标点
54              }
55              
56              flagMove=true;
57         }
58     }
59 }

源码参考:http://files.cnblogs.com/xuling/RoleMove.zip


转载于:https://www.cnblogs.com/xuling/archive/2013/03/05/2944939.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值