转载请注明出处:http://www.cnblogs.com/shamoyuu/p/MouseAim.html

原理很简单,因为骨骼也是一个物体,也拥有transform那一套东西,所以可以简单地用LookAt来让某个骨骼望向目标点。

using UnityEngine;

public class MouseAim : MonoBehaviour
{
// 要控制的骨骼
public Transform spine; // 要Lookat的那个点,把它设置为角色的子物体,然后z轴拉远一点
public Transform point; // 不断调试,获取具体旋转值,使角色正面朝向point
public Vector3 spineAngle = new Vector3(139.48f, 88.85f, 11.3f); // 调试用的小图片
public Texture2D targetAim;
// LookAt的点距离屏幕中心最大的距离,也就是限制了脖子转向的最大角度
public float distance = ;
// 鼠标指针所在的位置
private Vector2 mousePoint;
// 从哪个中心开始计算,我这里是用了屏幕中心
private Vector2 center;
// 图片展示的位置
private Vector2 aimLoc; void Start()
{
// 获取中心点位置
center = new Vector2(Screen.width / 2f, Screen.height / 2f);
} void LateUpdate()
{
UpdatePosition();
} private void UpdatePosition()
{
// 获取鼠标位置
mousePoint = new Vector2(Input.mousePosition.x, Input.mousePosition.y); // 临时变量,如果没有超出distance距离,就用鼠标位置,
// 否则用center到鼠标位置的单位向量×distance,再加上center坐标,就可以得到从center到鼠标位置被绳子拴住的一个点
// (可以理解为center为圆心,distance为半径,计算这个点在圆里的坐标)
// 数学不好还真不好理解- -!!!
Vector2 temp = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
if (Vector2.Distance(mousePoint, center) > distance)
{
temp = (mousePoint - center).normalized * distance + center;
}
aimLoc = Camera.main.WorldToViewportPoint(Camera.main.ScreenToWorldPoint(new Vector3(temp.x, temp.y, Camera.main.farClipPlane))); if (point != null)
{
Vector3 pointPosition = point.localPosition;
// 此处数值可能要稍作修改,主要取决于aimLoc在x和y的最大值和最小值,还有point的y轴(1.2f)
pointPosition.x = (aimLoc.x - 0.5f) / 0.24f;
pointPosition.y = (aimLoc.y - 0.5f) / 0.31f / 1.5f + 1.2f;
point.localPosition = pointPosition;
spine.LookAt(point, Vector3.up);
spine.Rotate(spineAngle);
}
} // 在屏幕上绘制那个点,方便调试
void OnGUI()
{
GUI.DrawTexture(new Rect(aimLoc.x * Screen.width - , Screen.height - (aimLoc.y * Screen.height) - , , ), targetAim, ScaleMode.StretchToFill, true, 10.0f);
}
}

↑↑↑代码就是这么简单↑↑↑

可以看到我们的角色在边跑边攻击的时候,头部还一直望向目标

效果很不错,当然也不是只能用来控制头部,如果是腰部的骨骼的话,就可以做第一人称射击游戏那种转向瞄准了

补图

此图中的2个小圆球,就是point,一个是头部的,一个是右手臂的

【Unity3D】Unity3D 让角色的头部望向鼠标的更多相关文章

  1. [Unity3D]Unity3D游戏开发之角色控制漫谈

    各位朋友,大家好.我是秦元培,欢迎大家关注我的博客,我的博客地址blog.csdn.net/qinyuanpei.今天呢,我们来说说Unity3D中的角色控制,这篇文章并非关注于Unity3D中的某项 ...

  2. [Unity3D]Unity3D圣骑士模仿游戏开发传仙灵达到当局岛

    大家好,我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 在前面的文章中.我们分别实现了一个自己定义的角色控制器<[Unity3D]Unity3D游戏开 ...

  3. [Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用

    大家好,我是秦培,欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 博主今天研究了在Unity3D中的数据持久化问题.数据持久化在不论什么一个开发领 ...

  4. [Unity3D]Unity3D游戏开发之飞机大战项目解说

    大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目.这是一个比較综合的 ...

  5. 【Unity3D】3D角色换装++ Advance

    http://www.cnblogs.com/dosomething/archive/2012/12/15/2818897.html 本文在之前的文章Unity3D角色换装的原理 基础上做一个补充 给 ...

  6. 【Unity3d】3d角色换装实现原理及步骤

    http://www.cnblogs.com/dosomething/archive/2012/04/15/2450526.html 1.角色模型制作 unity3d支持Skin动画  但是不支持Ph ...

  7. unity3d 摄像机跟随角色时被物体遮挡解决方案

    参考文章:http://www.xuanyusong.com/archives/1991 在看此文章时请先看上面的参考文章 看完以上文章后,你也许会想人家都已经给出所有代码了,你还写个毛啊 别急,现在 ...

  8. unity3d NGUI制作角色展示框

    最近在搞赛车漂移,所以一直没有更新博客 现在已经实现圈数检测.复位点检测.反向检测等功能 本来准备写成三篇文章的,太忙了,等过段时间不忙了在写吧 今天有朋友问我3D角色怎么给他固定在一个框里面 这个功 ...

  9. unity3d自己写角色移动脚本

    废话没有,直接上代码: using UnityEngine; using System.Collections; public class SuperWalk : MonoBehaviour { pu ...

随机推荐

  1. 搭建yum仓库与定制rpm包

    笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们自动化部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请 ...

  2. Codeforces C. Classroom Watch

    C. Classroom Watch time limit per test 1 second memory limit per test 512 megabytes input standard i ...

  3. 【Tomcat】Tomcat的使用

    第一章 JDK的安装 1.1  windows下安装 1.1.1  配置环境变量 安装完成后,还要进行 Java 环境的配置,才能正常使用,步骤如下: (1)在我的电脑点击右键——〉选择属性, (2) ...

  4. STP协议

    STP协议的作用: 第一, 可以避免网络环路和广播风暴. 二层数据包是没有TTL(time to live)的,如果不加以限制,可能会无限的传播下去.二层设备间如果存在环路,大量的广播包就可能导致广播 ...

  5. BZOJ 3295: [Cqoi2011]动态逆序对 [CDQ分治]

    RT 传送门 首先可以看成倒着插入,求逆序对数 每个数分配时间(注意每个数都要一个时间)$t$,$x$位置,$y$数值 $CDQ(l,r)$时归并排序$x$ 然后用$[l,mid]$的加入更新$[mi ...

  6. POJ 2187 Beauty Contest [凸包 旋转卡壳]

    Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 36113   Accepted: 11204 ...

  7. BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼 [矩阵乘法]

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1082  Solved: 602[Submit][S ...

  8. 【转】PE详解

    参考网址: http://blog.tianya.cn/listcate-4259222-2269876-1.shtml PE文件

  9. JAVAEE——BOS物流项目05:OCUpload、POI、pinyin4J、重构分页代码、分区添加、combobox

    1 学习计划 1.实现区域导入功能 n OCUpload一键上传插件使用 n 将文件上传到Action n POI简介 n 使用POI解析Excel文件 n 完成数据库操作 n 使用pinyin4J生 ...

  10. SUSE-11 本地 zypper 配置

    配置本地 zypper 目的: 安装 SUSE-11 后想要再添加或删除软件组件将比较麻烦.通过配置本地 zypper 将可以从下载的软件仓库(repository)中安装软件包.   本地 zypp ...